package com.briup.jz.service.impl;


import com.briup.jz.bean.Comment;
import com.briup.jz.bean.extend.CommentExtend;
import com.briup.jz.dao.CommentMapper;
import com.briup.jz.dao.OrderMapper;
import com.briup.jz.dao.extend.CommentExtendMapper;
import com.briup.jz.service.ICommentService;
import com.briup.jz.utils.CustomerException;
import org.springframework.stereotype.Service;

import javax.annotation.Resource;
import java.util.Date;
import java.util.List;

/**
 * @author 马志宇
 * @project: jz
 * @description: 评论业务实现类
 * @create: 2020/6/13 23:07
 */
@Service
public class CommentServiceimpl implements ICommentService {
    @Resource
    private CommentMapper commentMapper;
    @Resource
    private CommentExtendMapper commentExtendMapper;
    @Resource
    private OrderMapper orderMapper;

    /**
     * 1. 发表/修改评论
     */
    // 检查订单状态是否为“待评论”
    @Override
    public void checkOrderStatus(long id) {
        //1. 先查询该订单状态
        String status = orderMapper.selectByPrimaryKey(id).getStatus();
        //2. 比较
        if(status.equals("待评论")){
            // “待评论”，可以评论
            return;
        }
        // 不能评论
        throw new CustomerException("不能评论，因为此订单的状态不为“待评论”");
    }

    // 发表/修改评论
    @Override
    public void commentOrUpdate(Comment comment) {
        comment.setCommentTime(new Date().getTime());
        if(comment.getId() != null){
            // 修改
            // 先检查该评论是否存在
            Comment commentCheck = commentMapper.selectByPrimaryKey(comment.getId());
            if(commentCheck == null){
                throw new CustomerException("修改失败，要修改的评论不存在");
            }
            // 存在，更新
            commentMapper.updateByPrimaryKey(comment);
        } else {
            // 将评论的状态置为待审核，发表
            comment.setStatus(CommentExtend.NOTAPPROVED);
            commentMapper.insert(comment);

        }

    }


    /**
     *  2.查看评论
     */
    // 通过状态查找评论
    @Override
    public List<CommentExtend> queryComments_normal(String status) {
        return commentExtendMapper.queryComments_normal(status);
    }

    // 通过状态查找评论和子评论
    @Override
    public List<CommentExtend> queryComments(String status) {
        return commentExtendMapper.queryComments(status);
    }

    // 通过id查找评论和子评论
    @Override
    public CommentExtend findByIdWithFollow(long id) {
        return commentExtendMapper.selectByIdWithFollow(id);
    }


    /**
     * 3. 删除评论
     */
    // 删除评论
    @Override
    public void deleteById(long id) {
        //  先判断该id对应的数据是否存在？
        Comment commentCheck = commentMapper.selectByPrimaryKey(id);
        if(commentCheck == null){
            // 当不存在，报错！
            throw new CustomerException("删除失败，要删除的数据不存在");
        }
        // 当存在，删除
        commentMapper.deleteByPrimaryKey(id);
    }


    /**
     * 4. 审核评论
     */
    // 修改评论的状态
    @Override
    public void updateStatus(long id, String stauts) {
        // 先检查该评论是否存在
        Comment commentCheck = commentMapper.selectByPrimaryKey(id);
        if(commentCheck == null){
            throw new CustomerException("修改失败，要修改的评论不存在");
        }
        // 存在，更新
        commentExtendMapper.updateStatus(id, stauts);
    }


    /**
     * 5. 顾客投诉
     */
    // 顾客发起投诉
    @Override
    public void initiateComplaint(long orderId, long userId, String content) {
        Comment comment = new Comment();
        comment.setScore(-1);
        comment.setStatus(CommentExtend.NOTARBITRATED);
        comment.setCommentTime(new Date().getTime());
        comment.setOrderId(orderId);
        comment.setUserId(userId);
        comment.setContent(content);
        commentMapper.insert(comment);
    }
}
